import { request } from '../request.js'
import { setToken, setUserInfo, getUserProfile, updateUserAvatar, updateUserNickname } from '../utils/auth.js'

// 微信登录
export const wxLogin = () => {
  return new Promise((resolve, reject) => {
    // 获取微信登录code
    uni.login({
      provider: 'weixin',
      success: async loginRes => {
        if (loginRes.code) {
          try {
            // 获取本地存储的用户信息
            const userProfile = getUserProfile() || {}
            
            // 打印用户信息，便于调试
            console.log('发送登录请求，用户信息:', userProfile)
            
            if (!userProfile.nickName || !userProfile.avatarUrl) {
              uni.hideLoading()  // 确保加载状态被关闭
              return reject(new Error('请先完善用户头像和昵称'))
            }
            
            // 确保用户信息字段名称正确
            const userInfo = {
              nickName: userProfile.nickName || '',
              avatarUrl: userProfile.avatarUrl || '',
              gender: userProfile.gender !== undefined ? userProfile.gender : 0,
              country: userProfile.country || '',
              province: userProfile.province || '',
              city: userProfile.city || '',
              language: userProfile.language || ''
            }
            
            console.log('格式化后的用户信息:', userInfo)
            
            // 发送code到后端换取用户信息和token
            const res = await request({
              url: '/user/login',
              method: 'POST',
              data: {
                code: loginRes.code,
                userInfo: userInfo
              }
            })
            
            console.log('登录响应:', res)
            
            if (res.code === 0 && res.data) {
              // 检查后端返回的用户信息
              const backendUserInfo = res.data.userInfo || {}
              console.log('后端返回的用户信息:', backendUserInfo)
              
              // 合并本地用户信息和后端用户信息
              const mergedUserInfo = {
                ...backendUserInfo,
                // 如果后端没有返回头像和昵称，则使用本地存储的
                nickname: backendUserInfo.nickname || userProfile.nickName || '',
                avatar: backendUserInfo.avatar || userProfile.avatarUrl || ''
              }
              
              console.log('合并后的用户信息:', mergedUserInfo)
              
              // 保存token和合并后的用户信息
              setToken(res.data.token)
              setUserInfo(mergedUserInfo)
              
              // 如果后端返回的用户信息中没有头像和昵称，但本地有，则更新到后端
              if ((!backendUserInfo.avatar || !backendUserInfo.nickname) && 
                  (userProfile.avatarUrl || userProfile.nickName)) {
                try {
                  // 更新用户信息
                  await updateUserInfo({
                    nickname: userProfile.nickName || backendUserInfo.nickname || '',
                    avatar: userProfile.avatarUrl || backendUserInfo.avatar || ''
                  })
                  console.log('已更新用户头像和昵称到后端')
                } catch (updateError) {
                  console.error('更新用户信息失败:', updateError)
                }
              }
              
              resolve({
                ...res.data,
                userInfo: mergedUserInfo
              })
            } else {
              uni.hideLoading()  // 确保加载状态被关闭
              reject(new Error(res.message || '登录失败'))
            }
          } catch (error) {
            console.error('登录请求失败:', error)
            uni.hideLoading()  // 确保加载状态被关闭
            reject(error)
          }
        } else {
          uni.hideLoading()  // 确保加载状态被关闭
          reject(new Error('获取微信code失败'))
        }
      },
      fail: err => {
        console.error('微信登录失败:', err)
        uni.hideLoading()  // 确保加载状态被关闭
        reject(err)
      }
    })
  })
}

// 获取用户信息
export const getUserInfo = () => {
  return request({
    url: '/user/profile',
    method: 'GET'
  })
}

// 更新用户信息
export const updateUserInfo = (data) => {
  console.log('更新用户信息:', data)
  
  // 如果包含头像，同时更新本地存储
  if (data.avatar) {
    updateUserAvatar(data.avatar)
  }
  
  // 如果包含昵称，同时更新本地存储
  if (data.nickname) {
    updateUserNickname(data.nickname)
  }
  
  return request({
    url: '/user/profile',
    method: 'PUT',
    data
  })
}

// 登出
export const logout = () => {
  return new Promise((resolve) => {
    // 清除本地存储的token和用户信息
    uni.removeStorageSync('xuetang_token')
    uni.removeStorageSync('xuetang_user_info')
    uni.removeStorageSync('userProfile')
    resolve()
  })
}

// 更新用户头像到后端
export const updateAvatarToBackend = (avatarUrl) => {
  if (!avatarUrl) return Promise.reject(new Error('头像URL不能为空'))
  
  return updateUserInfo({
    avatar: avatarUrl
  })
}

// 更新用户昵称到后端
export const updateNicknameToBackend = (nickname) => {
  if (!nickname) return Promise.reject(new Error('昵称不能为空'))
  
  return updateUserInfo({
    nickname: nickname
  })
} 